#pragma once

#include <vector>
#include "SimOneIOStruct.h"

struct SensorInfo
{
    int id;
};

struct CameraInfo : public SensorInfo
{
	unsigned int resWidth;
    unsigned int resHeight;
};

struct ObstacleInfo : public SensorInfo
{
    unsigned int maxDetectNum;
};

struct RadarInfo : public SensorInfo
{
	unsigned int maxRadarDetectNum;
	unsigned int radarDetectionsId;
};

struct UltrasonicRadarInfo : public SensorInfo
{
	unsigned int maxUltrasonicDetectNum;
	unsigned int ultrasonicDetectionsId;
};

struct LidarInfo : public SensorInfo
{
	unsigned int pointCloudDataSize;
};

struct SensorConfigurationsInfo : public SensorInfo
{
	unsigned int sensorNum;
};

struct SensorDetectionInfo : public SensorInfo
{
	unsigned int sensorDetectNum;
	unsigned int sensorDetectionsId;
};

enum class ControlMode
{
	DRIVER_CONTROL,
	POSE_CONTROL
};

struct SimulinkDevConfig
{
	std::vector<CameraInfo> cameras;
    //std::vector<ObstacleInfo> obstacles;
	std::vector<RadarInfo> radars;
	std::vector<UltrasonicRadarInfo> ultrasonicRadars;
	std::vector<LidarInfo> lidars;
	//std::vector<SensorConfigurationsInfo> sensorConfigurations;
	//std::vector<SensorDetectionInfo> sensorDetections;
	bool useSimOneDriver;
	ControlMode ctrlMode;

	void reset() {
		cameras.clear();
		lidars.clear();
		useSimOneDriver = false;
		ctrlMode = ControlMode::DRIVER_CONTROL;
	}
};